/**
 * 认证工具类
 * 用于管理用户登录状态和权限验证
 */

export class AuthUtils {
  // 本地存储的键名
  static LOGIN_KEY = 'is_logged_in'
  static USER_DATA_KEY = 'user_login_data'
  static TOKEN_KEY = 'user_token'

  /**
   * 检查用户是否已登录
   * @returns {boolean}
   */
  static isLoggedIn() {
    const isLoggedIn = localStorage.getItem(this.LOGIN_KEY) === 'true'
    const userData = this.getUserData()
    
    // 检查登录状态和用户数据是否存在
    if (!isLoggedIn || !userData) {
      return false
    }

    // 检查token是否过期（24小时）
    const loginTime = userData.loginTime
    const currentTime = new Date().getTime()
    const expireTime = 24 * 60 * 60 * 1000 // 24小时

    if (currentTime - loginTime > expireTime) {
      this.logout()
      return false
    }

    return true
  }

  /**
   * 获取用户数据
   * @returns {object|null}
   */
  static getUserData() {
    try {
      const userData = localStorage.getItem(this.USER_DATA_KEY)
      return userData ? JSON.parse(userData) : null
    } catch (error) {
      console.error('获取用户数据失败:', error)
      return null
    }
  }

  /**
   * 获取当前用户名
   * @returns {string|null}
   */
  static getCurrentUsername() {
    const userData = this.getUserData()
    return userData ? userData.username : null
  }

  /**
   * 获取用户Token
   * @returns {string|null}
   */
  static getToken() {
    const userData = this.getUserData()
    return userData ? userData.token : null
  }

  /**
   * 登出操作
   */
  static logout() {
    localStorage.removeItem(this.LOGIN_KEY)
    localStorage.removeItem(this.USER_DATA_KEY)
    localStorage.removeItem(this.TOKEN_KEY)
    
    // 清除其他可能的缓存数据
    this.clearCache()
  }

  /**
   * 清除缓存数据
   */
  static clearCache() {
    // 可以在这里清除其他应用相关的缓存
    console.log('清除用户缓存数据')
  }

  /**
   * 检查用户权限
   * @param {string} permission 权限标识
   * @returns {boolean}
   */
  static hasPermission(permission) {
    if (!this.isLoggedIn()) {
      return false
    }

    const userData = this.getUserData()
    const username = userData.username

    // 简单的权限控制（可以根据需要扩展）
    const permissions = {
      'admin': ['all'], // 管理员拥有所有权限
      'user': ['read', 'trade'], // 普通用户拥有读取和交易权限
      'trader': ['read', 'trade', 'statistics'] // 交易员拥有读取、交易和统计权限
    }

    const userPermissions = permissions[username] || []
    return userPermissions.includes('all') || userPermissions.includes(permission)
  }

  /**
   * 刷新登录状态（延长有效期）
   */
  static refreshLogin() {
    if (this.isLoggedIn()) {
      const userData = this.getUserData()
      if (userData) {
        userData.loginTime = new Date().getTime()
        localStorage.setItem(this.USER_DATA_KEY, JSON.stringify(userData))
      }
    }
  }

  /**
   * 验证硬编码的用户凭据
   * @param {string} username 用户名
   * @param {string} password 密码
   * @returns {boolean}
   */
  static validateCredentials(username, password) {
    // 硬编码的用户凭据
    const validCredentials = [
      { username: 'admin', password: '123456', role: 'admin' },
      { username: 'user', password: '123456', role: 'user' },
      { username: 'trader', password: '888888', role: 'trader' }
    ]

    return validCredentials.find(cred => 
      cred.username === username && cred.password === password
    ) || null
  }

  /**
   * 保存登录状态
   * @param {string} username 用户名
   * @param {string} role 用户角色
   */
  static saveLoginState(username, role = 'user') {
    const loginData = {
      username: username,
      role: role,
      loginTime: new Date().getTime(),
      token: this.generateToken(username)
    }
    
    localStorage.setItem(this.USER_DATA_KEY, JSON.stringify(loginData))
    localStorage.setItem(this.LOGIN_KEY, 'true')
  }

  /**
   * 生成Token
   * @param {string} username 用户名
   * @returns {string}
   */
  static generateToken(username) {
    const timestamp = new Date().getTime()
    const randomStr = Math.random().toString(36).substring(2)
    return btoa(`${username}_${timestamp}_${randomStr}`)
  }
}

export default AuthUtils